package businessObject;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import data.*;
import dataTransferObject.*;

public class LugaresInteres {
	
	private ICategoriaDAO categoriaDAO;
	private IZonaDAO zonaDAO;
	private ILugarDAO lugarDAO;
	private ILugarTempDAO lugarTempDAO;
	private IUbicacionDAO ubicacionDAO;
	private List<Categoria> categorias;
	private List<Zona> zonas;
	private static LugaresInteres pdi;
	
	public static synchronized LugaresInteres getInstance() {
		if (pdi == null) {
			pdi = new LugaresInteres();
		}
		return pdi;
	}

	private LugaresInteres() {
		categoriaDAO = new JDBCCategoriaDAO();
		categorias = categoriaDAO.selectAllCategorias();
		zonaDAO = new JDBCZonaDAO();
		zonas = zonaDAO.selectAllZonas();
		lugarDAO = new JDBCLugarDAO();
		lugarTempDAO = new JDBCLugarTempDAO();
		ubicacionDAO = new JDBCUbicacionDAO();
	}
	
	public List<Categoria> getCategorias() {
		return this.categorias;
	}
	
	public Categoria getCategoria(int idCategoria) {
		Categoria categoria = null;
		categoria = categoriaDAO.selectCategoria(idCategoria);
		return categoria;
	}
	
	public List<Zona> getZonas() {
		return this.zonas;
	}
		
	public Zona getZona(int idZona) {
		Zona zona = null;
		zona = zonaDAO.selectZona(idZona);
		return zona;
	}
	
	public List<Lugar> getLugares(int idCategoria, int idZona) {
		List<Lugar> lugares = null;
		lugares = lugarDAO.selectLugares(idCategoria, idZona);
		return lugares;
	}
	
	public Lugar getLugar(int idLugar) {
		Lugar lugar = null;
		lugar = lugarDAO.selectLugar(idLugar);
		return lugar;
	}
	
	public boolean newLugar(Lugar lugar, int idLugarTemp) {
		lugarDAO.insertLugar(lugar, idLugarTemp);
		return true;
	}
	
	public List<LugarTemp> getAllLugaresTemp() {
		List<LugarTemp> lugares = null;
		lugares = lugarTempDAO.selectAllLugares();
		return lugares;
	}
	
	public LugarTemp getLugarTemp(int idLugar) {
		LugarTemp lugar = null;
		lugar = lugarTempDAO.selectLugar(idLugar);
		return lugar;
	}
	
	public boolean newLugarTemp(LugarTemp lugar) {
		lugarTempDAO.insertLugar(lugar);
		return true;
	}

	public int getIdUbicacion(int idZona, String direccion) {
		int idUbicacion;
		idUbicacion = ubicacionDAO.selectIdUbicacion(idZona, direccion);
		return idUbicacion;
	}
	
	public boolean newUbicacion(Ubicacion ubicacion) {
		ubicacionDAO.insertUbicacion(ubicacion);
		return true;
	}
	
	public boolean datosRellenos(Map <String, String[]> datosForm) {
		boolean valido = true;
		
		if (datosForm != null) {
			Collection<String[]> valores = datosForm.values();
			Iterator<String[]> itValores = valores.iterator();
			
			while (itValores.hasNext() && valido) {
				String[] valor = (String[]) itValores.next();
				
				for (int i = 0; i < valor.length; i++) {
					if (! (valor[i].length() > 0)) {
						valido = false;
					}
				}
			}
		}
		return valido;
	}
	
	public boolean esDouble(String dato) {
		try {
			Double.parseDouble(dato);
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}
}
